<?php

/**
 * Persona form.
 *
 * @package    fisio-ud
 * @subpackage form
 * @author     Johan AR <j3valentin@gmail.com>
 */
class PersonaForm extends BasePersonaForm {

  public function configure() {
//    Cargar los tipos de documentos
    $this->loadDocuments();
//    Validar la identificacion
    $this->validatorIdentification();
//    Validar los nombre
    $this->validatorSchema['nombres'] = new sfValidatorString(array(), array('required' => 'Los nombres son necesarios.'));
//    Validar los apellidos
    $this->validatorSchema['apellidos'] = new sfValidatorString(array(), array('required' => 'Los apellidos son necesarios.'));

//    Configurar fecha de nacimiento
    $this->configureBirth();
//    Validar fecha de nacimiento
    $this->validatorBirth();

//    Configurar campo de foto
    $this->configurePicture();
//    $this->widgetSchema['foto'] = new sfWidgetFormInputFile();
//    Validar campo foto
    $this->validatorPicture();
//    $this->validatorSchema['foto'] = new sfValidatorFile();
//    Union de los formulaios
    $this->mergeRelation(
            'PersonaLocalizacion', array(
        'add_link' => 'Agregar',
        'empty_label' => 'Localizaci&oacute;n'
//                'item_pattern' => '%model%%index%' ,
//                'title' => 'Hola  ' ,
//                'remove_fields' =>  array('pictual_content_id' , 'textual_content_id' , 'user_id') ,
//                'delete_name' => 'Hola: ' ,
//                'max_additions' => 1 ,
//                'add_empty' => $this->isNew() ,
            )
    );

//    Establecer etiquetas para los widgets
    $this->setLabels();
//    Eliminar la fecha de creacion y de acualizacion en los formularios
    unset($this['created_at'], $this['updated_at']);
  }

  public function loadDocuments() {
    $documentos = array_merge(array(''), PersonaPeer::getDocuments());

    $this->widgetSchema['documento_id'] = new sfWidgetFormChoice(array('choices' => $documentos));

    $this->validatorSchema['documento_id'] = new sfValidatorChoice(
                    array('choices' => array_keys($documentos)),
                    array('required' => 'Selecciona el tipo de documento')
    );
  }

  public function validatorIdentification() {
    $this->validatorSchema['identificacion'] = new sfValidatorAnd(
                    array(
                        new sfValidatorString(
                                array('max_length' => 20),
                                array('max_length' => 'La identificaci&oacute;n "%value%" es demasiado largo. Su longitud debe ser m&aacute;ximo de %max_length% car&aacute;cteres.')
                        ),
                        new sfValidatorNumber()
                    ), array(),
                    array(
                        'required' => 'La identificaci&oacute;n es necesaria.',
                        'invalid' => 'La identificaci&oacute;n no es v&aacute;lida.',
                    )
    );
    $this->validatorSchema->setPostValidator(
      new sfValidatorPropelUnique(
              array('model' => 'Persona', 'column' => array('identificacion')),
              array('invalid' => 'La identificaci&oacute;n ya esta registrada en el sistema',)
              )
    );
  }

  public function configureBirth() {
    $years = range(1920, 2010);
    $this->widgetSchema['fecha_nacimiento'] = new sfWidgetFormI18nDate(
                    array(
                        'culture' => 'es',
                        'format' => '%day% - %month% - %year%',
                        'years' => array_combine($years, $years)
                    )
    );
//    $maxDate = strtotime('-14 year');
//    $maxYear = date('Y', $maxDate);
//    $this->widgetSchema['fecha_nacimiento'] = new sfWidgetFormJQueryDate(
//                    Array(
//                        'config' => '{
//                          minDate: new Date(1900, 1 - 1, 1),
//                          maxDate: new Date(' . date('Y', $maxDate) . ', ' . (date('m', $maxDate) - 1) . ', ' . date('d', $maxDate) . ')
//                                }',
//                        'image' => '/images/calendar.gif',
//                    )
//    );
  }

  public function validatorBirth() {
    $this->validatorSchema['fecha_nacimiento'] = new sfValidatorAnd(
                    array(
                        $this->validatorSchema['fecha_nacimiento'],
                        new sfValidatorDate()
                    ), array(), array(
                'required' => 'La fecha de nacimiento es necesaria.',
                'invalid' => 'La fecha de nacimiento no es v&aacute;lida.'
                    )
    );
  }

  public function configurePicture() {
    $this->widgetSchema['foto'] = new sfWidgetFormInputFileEditable(
                    array(
                        'label' => 'Foto',
                        'file_src' => '/uploads/persona/thumb_' . $this->getObject()->getFoto(),
                        'is_image' => true,
                        'edit_mode' => !$this->isNew(),
                        'with_delete' => false,
                        'delete_label' => 'Eliminar',
                        'template' => '<div>%file%<br/>%input%</div>'
                    )
    );
  }

  public function validatorPicture() {
    $this->validatorSchema['foto'] = new sfValidatorFile(
                    array(
                        'required' => false,
//                        'max_size' => 1048576,
//                        'mime_types' => array('image/jpeg', 'image/pjpeg', 'image/png', 'image/gif'),
                        'mime_types' => 'web_images',
                        'path' => sfConfig::get('sf_upload_dir') . '/persona/',
                        'validated_file_class' => 'sfResizedFile'
                    ),
                    array(
                        'invalid' => 'La foto no es v&aacute;lida.',
                        'required' => 'La foto es necesaria.'
                    )
    );
  }

  public function setLabels() {
    $this->widgetSchema->setLabels(
            array(
                'documento_id' => 'Tipo de documento *',
                'identificacion' => 'N&uacute;mero de identificaci&oacute;n *',
                'nombres' => 'Nombres *',
                'apellidos' => 'Apellidos *',
                'fecha_nacimiento' => 'Fecha de nacimiento'
            )
    );
  }

}